using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("MultiSliceElement")]
	public class MultiSliceElement : MonoBehaviour
	{
		public enum Direction
		{
			X,
			Y,
			Z
		}

		public enum XAxisAlign
		{
			LEFT,
			MIDDLE,
			RIGHT
		}

		public enum YAxisAlign
		{
			TOP,
			MIDDLE,
			BOTTOM
		}

		public enum ZAxisAlign
		{
			FRONT,
			MIDDLE,
			BACK
		}

		[Attribute38("MultiSliceElement.Slice")]
		public class Slice : MonoClass
		{
			public GameObject m_slice => method_3<GameObject>("m_slice");

			public Vector3 m_minLocalPadding => method_2<Vector3>("m_minLocalPadding");

			public Vector3 m_maxLocalPadding => method_2<Vector3>("m_maxLocalPadding");

			public bool m_reverse => method_2<bool>("m_reverse");

			public Slice(IntPtr address, string className)
				: base(address, className)
			{
			}

			public Slice(IntPtr address)
				: this(address, "Slice")
			{
			}

			public static GameObject op_Implicit(Slice slice)
			{
				return MonoClass.smethod_15<GameObject>(TritonHs.MainAssemblyPath, "", "Slice", "op_Implicit", new object[1] { slice });
			}
		}

		public List<Slice> m_slices => method_3<Class271<Slice>>("m_slices")?.method_25();

		public List<GameObject> m_ignore => method_3<Class271<GameObject>>("m_ignore")?.method_25();

		public Vector3 m_localPinnedPointOffset => method_2<Vector3>("m_localPinnedPointOffset");

		public XAxisAlign m_XAlign => method_2<XAxisAlign>("m_XAlign");

		public YAxisAlign m_YAlign => method_2<YAxisAlign>("m_YAlign");

		public ZAxisAlign m_ZAlign => method_2<ZAxisAlign>("m_ZAlign");

		public Vector3 m_localSliceSpacing => method_2<Vector3>("m_localSliceSpacing");

		public Direction m_direction => method_2<Direction>("m_direction");

		public bool m_reverse => method_2<bool>("m_reverse");

		public bool m_useUberText => method_2<bool>("m_useUberText");

		public MultiSliceElement(IntPtr address, string className)
			: base(address, className)
		{
		}

		public MultiSliceElement(IntPtr address)
			: this(address, "MultiSliceElement")
		{
		}

		public static Vector3 GetAlignmentVector(Vector3 interpolate, XAxisAlign x, YAxisAlign y, ZAxisAlign z)
		{
			return MonoClass.smethod_14<Vector3>(TritonHs.MainAssemblyPath, "", "MultiSliceElement", "GetAlignmentVector", new object[4] { interpolate, x, y, z });
		}

		public void AddSlice(GameObject obj)
		{
			method_9("AddSlice", new Class276.Enum20[1] { Class276.Enum20.Class }, obj);
		}

		public void AddSlice(GameObject obj, Vector3 minLocalPadding, Vector3 maxLocalPadding, bool reverse)
		{
			method_9("AddSlice", new Class276.Enum20[4]
			{
				Class276.Enum20.Class,
				Class276.Enum20.ValueType,
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean
			}, obj, minLocalPadding, maxLocalPadding, reverse);
		}

		public void ClearSlices()
		{
			method_8("ClearSlices");
		}

		public void UpdateSlices()
		{
			method_8("UpdateSlices");
		}
	}
}
